﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Presentacion.Contrato.Propuestas;
using Sistema_Totem.Logica.Fabricas;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Clases;
using Sistema_Totem.Clases.Fabricas;
using System.Data;
using System.Web.UI.WebControls;
using System.Web.UI;

namespace Sistema_Totem.Presentacion.Presentador.Propuestas
{
    public class PresentadorAgregarPropuestaSecciones
    {
        #region Atributos

        private IContratoAgregarPropuestaSecciones _vista;
        private string _mensajeError = "Error al intentar agregar propuesta";
        private string _mensajeExiste = "Este proyecto ya posee una propuesta, si lo desea elimine y agregue otra";

        #endregion Atributos

        #region Constructor
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="vista">El contrato que implementa</param>
        public PresentadorAgregarPropuestaSecciones(IContratoAgregarPropuestaSecciones vista)
        {
            _vista = vista;
        }

        #endregion Constructor

        #region Metodos
        /// <summary>
        /// Metodo que valida si existe una propuesta para el proyecto o no
        /// </summary>
        /// <returns>True si tiene, False si no tiene</returns>
        public bool ValidarExistenciaPropuesta()
        {
            Proyecto _miProyecto = (Proyecto)_vista.Sesion["proyecto"];
            Comando<bool> _comando = FabricaComando.CrearComandoVerificarPropuesta(_miProyecto.IdProyecto);
            if (_comando.Ejecutar() == false)
            {
                _vista.gridSecciones.Visible = true;
                _vista.etiquetaMensajeInformativo.Visible=false;
                _vista.botonSiguiente.Visible = true;
                BuscarPLantillaPropuesta(_miProyecto.IdProyecto);
                return false;
            }
            else
            {
                _vista.gridSecciones.Visible = false;
                _vista.etiquetaMensajeInformativo.Visible = true;
                _vista.etiquetaMensajeInformativo.Text = _mensajeExiste;
                _vista.botonSiguiente.Visible = false;
                return true;

            }

        }

        /// <summary>
        /// Llena el gridview con las secciones disponibles para la plantilla
        /// </summary>
        /// <param name="_plantilla">la plantilla</param>
        public void LLenarGridviewSecciones(Plantilla _plantilla)
        {
            Propuesta p = FabricaEntidad.NuevaPropuesta() as Propuesta;

            p.ListaSeccion = p.Secciones(_plantilla.Estructura, "");
            DataTable dataTableElemento = new DataTable();
            
            dataTableElemento.Columns.Add("Nombre", typeof(string));

            
            foreach (Seccion _seccion in p.ListaSeccion)
            {
                    dataTableElemento.Rows.Add(_seccion.Nombre);
                
            }
            _vista.gridSecciones.DataSource = dataTableElemento;
            _vista.gridSecciones.DataBind();
        }

        /// <summary>
        /// Devuelve la plantilla que tiene asociada la propuesta para el proyecto
        /// </summary>
        /// <param name="_idProyecto">Id del proyecto actual</param>
        public void BuscarPLantillaPropuesta(int _idProyecto)
        {
            Comando<Entidad> _comando = FabricaComando.CrearComandoConsultarPlantillaPropuesta(_idProyecto);
            Plantilla _plantilla = _comando.Ejecutar() as Plantilla;
            LLenarGridviewSecciones(_plantilla);
        }

        /// <summary>
        /// Envia a la siguiente pagina las secciones elegidas
        /// </summary>
        /// <returns></returns>
        public List<string> Siguiente()
        {
            List<string> listaSecc = new List<string>();
            try
            {
                foreach (GridViewRow seccion in _vista.gridSecciones.Rows)
                {
                    CheckBox seccionCheckeada = seccion.FindControl("chkSeleccionEscoger") as CheckBox;
                    
                    if (seccionCheckeada.Checked)
                    {

                        listaSecc.Add(seccion.Cells[0].Text.ToString());
                        
                    }
                }
                
            }
            catch (Exception error)
            {
                /* MensajeDeTransaccion.Text = error.Message;
                 MensajeDeTransaccion.CssClass = "transaccionFallida";
                 MensajeDeTransaccion.Visible = true;*/
            }
            return listaSecc;
            
        }
    }

        #endregion Metodos
}